CC=g++
XINC=-Isrc/core
CCFLAGS=-fPIC -O2 -Wall $(XINC) `pkg-config --cflags libsbml` -DNETUSECOLOR
LDFLAGS=`pkg-config --libs libsbml`
PYFLAGS=`pkg-config --cflags python | echo "-I/usr/include/python2.6"`
PCCOPTS=`perl -MExtUtils::Embed -e ccopts | sed 's/-Wdeclaration-after-statement//'`
PLDOPTS=`perl -MExtUtils::Embed -e ldopts`
BDIR=build
VPATH=src/core:src/test:src/runner:src/swig
OUTINC=include
PERLBUILD=build/perl
PYBUILD=build/python
PREFIX ?= lib/
SWIG=src/swig
$(shell test -d $(BDIR) || mkdir $(BDIR))
$(shell test -d $(OUTINC) || mkdir $(OUTINC))
$(shell test -d $(PERLBUILD) || mkdir $(PERLBUILD))
$(shell test -d $(PYBUILD) || mkdir $(PYBUILD))
#$(shell test -d $(PERLBUILD)/Scopes || mkdir $(PERLBUILD)/Scopes)
#$(shell test -d $(PERLBUILD)/auto/Scopes || mkdir -p $(PERLBUILD)/auto/Scopes)
CURDIR:=$(shell pwd)
.PHONY: perl install-perl

#runscopes: runner.cpp scopes.o sbml.o net.o netstruct.o array.o
#	$(CC) $(CCFLAGS) -o $(BDIR)$@ $^
runscopes: runner.cpp $(addprefix $(BDIR)/,tokenizer.o) $(addprefix $(BDIR)/,libScopes.so)
	$(CC) $(CCFLAGS) -Wl,-rpath,$(CURDIR)/build/ -o $(BDIR)/$@ $< $(BDIR)/tokenizer.o -Lbuild/ -lScopes 

testarray: testarray.cpp array.cpp array.h
	$(CC) -o $(BDIR)/$@ $^ $(CCFLAGS)

testnet: testnet.cpp $(addprefix $(BDIR)/,net.o netstruct.o array.o)
	$(CC) -o $(BDIR)/$@ $^ $(CCFLAGS)

testscopes: testscopes.cpp $(addprefix $(BDIR)/,scopes.o net.o netstruct.o array.o)
	$(CC) -o $(BDIR)/$@ $^ $(CCFLAGS)

testfindseeds: testfindseeds.cpp $(addprefix $(BDIR)/,findseeds.o scopes.o net.o netstruct.o array.o)
	$(CC)) -o $(BDIR)/$@ $^ $(CCFLAGS)

testsbml: testsbml.cpp $(addprefix $(BDIR)/,sbml.o net.o netstruct.o array.o)
	$(CC) -o $(BDIR)/$@ $^ $(CCFLAGS)

$(BDIR)/libScopes.so: $(addprefix $(BDIR)/,findseeds.o scopes.o sbml.o net.o netstruct.o array.o)
	$(CC) -shared  -o $@ $^ $(LDFLAGS)
	cp src/core/*.h $(OUTINC)

$(BDIR)/netstruct.o: netstruct.cpp netstruct.h
	$(CC)  -c -o $@ $< $(CCFLAGS)
	
$(BDIR)/net.o: net.cpp net.h
	$(CC) -c -o $@ $< $(CCFLAGS)
	
$(BDIR)/array.o: array.cpp array.h 
	$(CC) -c -o $@ $< $(CCFLAGS)

$(BDIR)/scopes.o: scopes.cpp scopes.h
	$(CC) -c -o $@ $< $(CCFLAGS)

$(BDIR)/sbml.o: sbml.cpp sbml.h
	$(CC) -c -o $@ $< $(CCFLAGS)

$(BDIR)/findseeds.o: findseeds.cpp findseeds.h
	$(CC) -c -o $@ $< $(CCFLAGS)

$(BDIR)/tokenizer.o: tokenizer.cpp tokenizer.h
	$(CC) -c -o $@ $< $(CCFLAGS)

$(BDIR)/Scopes_perl.cpp: Scopes.i Array.i array.h Net.i net.h functions.i scopes.h findseeds.h
	swig -perl -c++ -outdir $(PERLBUILD) $(XINC) -o $@ $<
$(PERLBUILD)/auto/Scopes/Scopes.so: $(addprefix $(BDIR)/,Scopes_perl.cpp array.o net.o netstruct.o scopes.o findseeds.o)
	$(shell test -d $(PERLBUILD)/auto/Scopes || mkdir -p $(PERLBUILD)/auto/Scopes)
	$(CC) -shared $(CCFLAGS) $(PCCOPTS) $(PLDOPTS) -o $@ $^
perl: $(PERLBUILD)/auto/Scopes/Scopes.so
	cd src/perl/templates/; cp -a --parents `find . -name *.pm` $(CURDIR)/$(PERLBUILD)
install-perl: perl
	$(shell test -d $(PREFIX) || mkdir $(PREFIX))
	cp -a $(CURDIR)/$(PERLBUILD)/* $(PREFIX)/
	
$(PYBUILD)/Scopes_py.cpp: $(SWIG)/Scopes_py.i array.h findseeds.h net.h netstruct.h sbml.h scopes.h
	swig -c++ -python $(XINC) -outdir $(PYBUILD) -o $@ $<
$(PYBUILD)/Scopes_py.o: $(PYBUILD)/Scopes_py.cpp
	$(CC) -c -o $@ $< $(CCFLAGS) $(PYFLAGS)
$(PYBUILD)/_Scopes.so: $(PYBUILD)/Scopes_py.o $(addprefix $(BDIR)/,findseeds.o scopes.o sbml.o net.o netstruct.o array.o)
	$(CC) -shared  $^ -o $@ $(LDFLAGS) 
python: $(PYBUILD)/_Scopes.so 
install-py: python
	$(shell test -d $(PREFIX) || mkdir $(PREFIX))
	cp -a $(CURDIR)/$(PYBUILD)/_Scopes.so $(PREFIX)/
	cp -a $(CURDIR)/$(PYBUILD)/Scopes.py $(PREFIX)/

clean:
	rm -rf $(BDIR) $(OUTINC)
	
	
	
# $(BDIR)/Array_perl.cpp: Array.i array.h
# 	swig -perl -c++ -outdir $(PERLBUILD)/Scopes/ $(ISWIG) -o $@ $<
# $(PERLBUILD)/auto/Scopes/Array/Array.so: $(addprefix $(BDIR)/,Array_perl.cpp array.o)
# 	$(shell test -d $(PERLBUILD)/auto/Scopes/Array || mkdir -p $(PERLBUILD)/auto/Scopes/Array)
# 	$(CC) -shared $(CCFLAGS) $(PCCOPTS) $(PLDOPTS) -o $@ $^
# 	
# $(BDIR)/Net_perl.cpp: Net.i net.h netstruct.h Array.i
# 	swig -perl -c++ -outdir $(PERLBUILD)/Scopes/ $(ISWIG) -o $@ $<
# $(PERLBUILD)/auto/Scopes/Net/Net.so: $(addprefix $(BDIR)/,Net_perl.cpp net.o netstruct.o array.o)
# 	$(shell test -d $(PERLBUILD)/auto/Scopes/Net || mkdir -p $(PERLBUILD)/auto/Scopes/Net)
# 	$(CC) -shared $(CCFLAGS) $(PCCOPTS) $(PLDOPTS) -o $@ $^
